package sucursal;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;


import productosYPresentaciones.Producto;
import org.junit.Before;
import org.junit.Test;

/**
 * Clase test de Stock
 * @author Stefania L. Chiniewicz
 *
 */
public class StockTest {

	Stock stock;
	Producto producto;
	
	@Before
	public void setUp() throws Exception {
		this.stock= new Stock();
		this.producto= mock(Producto.class);
		stock.agregarStock(producto, 5);
	}

	
	@Test
	public void testGetCantStock(){
		assertEquals(5,stock.getCantStock(producto));
	}
	
	@Test
	public void testAgregarProducto() {
		stock.agregarStock(producto, 5);
		assertEquals(stock.getCantStock(producto),10);
	}
	
	@Test
	public void testQuitarProducto() {
		stock.quitarStock(producto,2);
		assertEquals(stock.getCantStock(producto),3);
	}

	@Test
	public void testHayStockProductoTrue(){
		stock.hayStock(producto, 3);
		assertTrue(stock.getCantStock(producto)>=3);
	}
	
	@Test
	public void testHayStockProductoFalse(){
		stock.hayStock(producto, 6);
		assertFalse(stock.getCantStock(producto)>=6);
	}
	
	@Test
	public void testPuedeCubrirTrue(){
		Stock otroStock= new Stock();
		otroStock.agregarStock(producto, 2);
		
		assertTrue(stock.puedeCubrir(otroStock));
		
	}
	
	@Test
	public void testPuedeCubrirFalse(){
		Stock otroStock= new Stock();
		otroStock.agregarStock(producto, 6);
		
		assertFalse(stock.puedeCubrir(otroStock));
	}
	
	///Parte recien agregada!
	
	@Test
	public void testAgregarStockAlStock(){
		Stock nuevo= new Stock();
		nuevo.agregarStock(producto, 10);
		
		stock.agregarStockAlStock(nuevo);
		assertEquals(15,stock.getCantStock(producto));
	}
	
	@Test
	public void testRemoverStockAlStock(){
		Stock nuevo= new Stock();
		nuevo.agregarStock(producto, 2);
		
		stock.removerStockDeStock(nuevo);
		assertEquals(3,stock.getCantStock(producto));
	}
}
